package main

import (
	"fmt"
	"time"
)

// 数据传递

// Token 令牌
type Token struct{}

func NewWorker(id int, ch chan Token, nextCh chan Token) {
	for {
		token := <-ch // 获取令牌
		fmt.Println(id + 1)
		time.Sleep(time.Second)
		nextCh <- token // 令牌交给下一位
	}

}

func main() {
	// 4个channel
	ch := []chan Token{make(chan Token), make(chan Token), make(chan Token), make(chan Token)}
	for i := 0; i < 4; i++ {
		go NewWorker(i, ch[i], ch[(i+1)%4])
	}

	//把令牌交给第一位
	ch[0] <- struct{}{}

	select {}
}
